package com.hj.javase.encrypt;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HexFormat;

/**
 * @Author : hujing
 * @Date: 2025/6/3 16:42
 * 参考文章: https://liaoxuefeng.com/books/java/security/hash/index.html
 * 哈希算法:
 * 哈希算法又称摘要算法,它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要
 * 哈希算法最重要的特点:
 * 1.相同的输入一定得到相同的输出
 * 2.不同的输入大概率得到不同的输出(可能有哈希碰撞)
 *
 * 常用的哈希算法:
 * 算法	       输出长度（位）	输出长度（字节）   备注
 * MD5	       128 bits	    16 bytes        长度短,目前已经不推荐使用
 * SHA-1	   160 bits	    20 bytes
 * RipeMD-160  160 bits	    20 bytes
 * SHA-256	   256 bits	    32 bytes
 * SHA-512	   512 bits	    64 bytes
 */
public class HashDemo {

    public static void main(String[] args) throws NoSuchAlgorithmException {
        // 使用MD5算法计算字符串的哈希值
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update("Hello".getBytes());
        md.update("World".getBytes());
        byte[] result = md.digest();
        // 输出十六进制字符串
        System.out.println(HexFormat.of().formatHex(result));

        // 使用SHA-256算法计算字符串的哈希值
        MessageDigest digest1 = MessageDigest.getInstance("SHA-256");
        digest1.update("Hello".getBytes());
        digest1.update("World".getBytes());
        result = digest1.digest();
        System.out.println(HexFormat.of().formatHex(result));
    }
}
